<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台（PHP版）
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码，建议反馈是我们前进的动力
// | 开源版本可自由商用，可去除界面版权logo
// | gitee下载：https://gitee.com/likeshop_gitee/likeadmin
// | github下载：https://github.com/likeshop-github/likeadmin
// | 访问官网：https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------

namespace app\common\model\order;


use app\common\model\auth\Admin;
use app\common\model\BaseModel;
use app\common\model\callback\OrderCallback;
use app\common\model\promotion\PromotionLink;
use app\common\model\user\User;
use app\common\model\quickapp\Quickapp;


/**
 * Order模型
 * Class Order
 * @package app\common\model
 */
class Order extends BaseModel
{

    protected $name = 'order';


    public static $paytypeMapping = [
        [
            'id'    => 2,
            'label' => '微信支付',
        ],
        [
            'id'    => 3,
            'label' => '支付宝支付',
        ]
    ];

    // 数据状态 0:待支付 1:已支付 2:已取消 3:已关闭
    public static $statusMapping = [
        [
            'id' => 0,
            'label' => '待支付',
        ],
        [
            'id' => 1,
            'label' => '已支付',
        ],
        [
            'id' => 2,
            'label' => '已取消',
        ],
        [
            'id' => 3,
            'label' => '已关闭',
        ]
    ];


    /**
     * 关联的快应用
     *
     * @return \think\model\relation\HasOne
     */
    public function quickapp()
    {
        return $this->hasOne(Quickapp::class, 'id', 'platform');
    }

    public function user()
    {
        return $this->hasOne(User::class, 'id', 'user_id');
    }

    public function admin()
    {
        return $this->hasOne(Admin::class, 'id', 'admin_id');
    }


    public function callback()
    {
        return $this->hasOne(OrderCallback::class,'order_id','id');
    }

    public function channel()
    {
        return $this->hasOneThrough(PromotionLink::class, OrderCallback::class, 'order_id', 'id', 'id', 'promotion_link_id');
    }


    public function getPayTimeAttr($value, $data)
    {
        if (!empty($data['pay_time'])) {
            $data['pay_time'] = date('Y-m-d H:i:s', $data['pay_time']);
        }
        return $data['pay_time'];
    }
}
